<?php

require_once dirname(__FILE__) . '/../lib/reclamo_0800GeneratorConfiguration.class.php';
require_once dirname(__FILE__) . '/../lib/reclamo_0800GeneratorHelper.class.php';

/**
 * reclamo_0800 actions.
 *
 * @package    reclamos
 * @subpackage reclamo_0800
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
 */
class reclamo_0800Actions extends autoReclamo_0800Actions
{

  public function buildCriteria()
  {
    $c = parent::buildCriteria();
    $c->add(ReclamoPeer::ES0800, true, Criteria::EQUAL);
    $c->addDescendingOrderByColumn(ReclamoPeer::NRO_RECLAMO);
    return $c;

  }

  public function executeNew(sfWebRequest $request)
  {
    $this->form = new PreReclamo0800Form();

  }

  public function executeFinalizar(sfWebRequest $request)
  {
    $this->getRoute()->getObject()->finalizar();
    $this->getUser()->setFlash('notice', 'El reclamo fue cambiado a estado finalizado exitosamente.');
    $this->redirect('@reclamo_reclamo_0800');

  }

  public function executeNuevoReclamo(sfWebRequest $request)
  {
    $reclamo_array = $request->getParameter('reclamo');
    $asunto_id = $reclamo_array['asunto_id'] ? $reclamo_array['asunto_id'] : $request->getParameter('asunto');
    $tipo_atencion_id = $reclamo_array['tipo_atencion_id'] ? $reclamo_array['tipo_atencion_id'] : $request->getParameter('tipo_atencion');

    $asunto = AsuntoPeer::retrieveByPK($asunto_id);
    $tipo_atencion = TipoAtencionPeer::retrieveByPK($tipo_atencion_id);
    $reclamo = new Reclamo();
    $reclamo->setAsunto($asunto);
    $reclamo->setSfGuardUserId($this->getUser()->getGuardUser()->getId());
    $reclamo->setTipoAtencion($tipo_atencion);

    /*                  ASUNTOS EN EL SISTEMA
      +----+---------------------------------------+
      | id | nombre                                |
      +----+---------------------------------------+
      |  1 | Servicio ajeno Oceba                  |
      |  2 | Asesoramiento                         |
      |  3 | Baja tension                          |
      |  4 | Consulta por expediente OCEBA         |
      |  5 | Contacto con la distribuidora |
      |  6 | Denuncia Incidente/Accidente/Anomalia |
      |  7 | queja por servicio  del OCEBA         |
      |  8 | reclamo                               |
      |  9 | reclamo interrupcion de servicio  |
      |10 | Daños de artefacto-->TODO  |
      +----+---------------------------------------+ */

    switch ($asunto->getId())
    {
      case 1:
        $this->form_name = 'ServicioAjenoForm';
        $this->form = new ServicioAjenoForm($reclamo);
        $this->titulo = 'Formulario asunto ajeno servicio OCEBA';
        break;
      case 2:      #Asesoramiento
        $this->form = new AsesoramientoForm($reclamo);
        $this->form_name = 'AsesoramientoForm';
        $this->titulo = 'Formulario de asesoramiento';
        break;
      case 3:      #Baja tension
        $this->form = new BajaTensionForm($reclamo);
        $this->form_name = 'BajaTensionForm';
        $this->titulo = 'Formulario de reclamo por baja tensión';
        break;
      case 4:      #Consulta por expediente OCEBA
        $this->form = new ConsultaExpedienteForm($reclamo);
        $this->form_name = 'ConsultaExpedienteForm';
        $this->titulo = 'Formulario de consulta por expediente OCEBA';
        break;
      case 5:      #Contacto distribuidora
        $this->form = new ContactoDistribuidoraForm($reclamo);
        $this->form_name = 'ContactoDistribuidoraForm';
        $this->titulo = 'Formulario de contacto con la distribuidora';
        break;
      case 6:      #Denuncia Incidente/Accidente/Anomalia
        $this->form = new DenunciaForm($reclamo);
        $this->form_name = 'DenunciaForm';
        $this->titulo = 'Formulario de denuncia SVP/Incidente';
        break;
      case 7:      #queja por servicio  del OCEBA
        $this->form = new QuejaServicioOcebaForm($reclamo);
        $this->form_name = 'QuejaServicioOcebaForm';
        $this->titulo = 'Formulario de queja por servicio del OCEBA';
        break;
      case 8:      #reclamo
        $this->form = new ReclamoGeneralForm($reclamo);
        $this->form_name = 'ReclamoGeneralForm';
        $this->titulo = 'Formulario de reclamo';
        break;
      case 9:      #reclamo interrupcion de servicio
        $this->form = new InterrupcionServicioForm($reclamo);
        $this->form_name = 'InterrupcionServicioForm';
        $this->titulo = 'Formulario de reclamo por interrupcion de servicio';
        break;
        // case 10:      # artefactos
        // $this->form = new ArtefactosDaniadosForm($reclamo);
        //$this->form_name = 'ArtefactosDaniadosForm';
        //$this->titulo = 'Reclamo por artefactos dañados';
        break;
      default:
        break;
    }
    $this->form->setDefault('asunto_id', $asunto);
    $this->form->setDefault('sf_guard_user_id', $this->getUser()->getGuardUser()->getId());
    $this->form->setDefault('tipo_atencion_id', $tipo_atencion->getId());

  }

  public function executeCrearReclamo(sfWebRequest $request)
  {

    $this->form_name = $request->getParameter('form_name');
    $this->titulo = $request->getParameter('titulo');
    $this->form = new $this->form_name;

    $this->Reclamo = $this->form->getObject();
    $this->processForm($request, $this->form);
    $this->setTemplate('nuevoReclamo');

  }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {

    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $notice = $form->getObject()->isNew() ? 'Reclamo creado exitosamente. N° DE RECLAMO OCEBA: ' : 'Reclamo actualizado correctamente con número ';
      $Reclamo = $form->save();
      $notice = $notice . $Reclamo->getNroReclamoCompleto();
      $this->dispatcher->notify(new sfEvent($this, 'admin.save_object', array('object' => $Reclamo)));
      $notice_tipe = 'notice';
      $this->getUser()->setFlash($notice_tipe, $notice, true);
      $this->redirect('@reclamo_reclamo_0800');
    }
    else
    {
      $notice = "Ocurrieron algunos errores que no permiten guardar el formulario.";
      $notice_tipe = 'error';
      $this->getUser()->setFlash($notice_tipe, $notice, false);
      $this->setTemplate('nuevoReclamo');
    }

  }

  public function executeImprimirReclamo()
  {
    $this->setLayout('cleanLayout');
    $this->reclamo = $this->getRoute()->getObject();
    $this->back = '@reclamo_reclamo_0800';
    $this->setTemplate('imprimirReclamo');

  }



   // public function executeImprimirReclamo(sfWebRequest $request)
  //{
  //  $this->reclamo = $this->getRoute()->getObject();
  //  $this->redirect('@reclamo_to_pdf?id=' . $this->reclamo->getId());

  //}

  public function executeImprimirReclamoPDF(sfWebRequest $request)
  {
    $this->reclamo = ReclamoPeer::retrieveByPk($request->getParameter("id"));

    if ($this->reclamo === null)
    {
      throw new sfError404Exception();
    }

    $this->setLayout("cleanLayout");
  }



  public function executeEditObservacion(sfWebRequest $request)
  {
//    var_dump($request->isMethod('POST'));die();
    if($request->isMethod('POST'))
    {

      $reclamo_request = $request->getParameter('reclamo');
      $reclamo  = ReclamoPeer::retrieveByPK($reclamo_request ['id']);
      $reclamo->setObservacion($reclamo_request['observacion']);
      $reclamo->save();
      $this->getUser()->setFlash('notice', 'La observacion se actualizo correctamente', true);
      $this->redirect('reclamo_0800/index');
    }
    else
    {
      $this->Reclamo = $this->getRoute()->getObject();
      $this->form = new EditObservacionForm($this->Reclamo);
    }

  }




}
